#ifndef IM_H
#define IM_H

#include <QWidget>
#include <QStackedWidget>
#include <QPushButton>
#include <QHBoxLayout>
#include <QVBoxLayout>
#include "database.h"

// 前置声明：避免头文件循环引用
class CashierDialog;
class StockIn;
class StockInStatistics;
class SaleStatistics;
class SalesAnalysis;
class ProductModel;
class ProductBrowsePanel;
class ProductBrowsePage;

// 主界面类：整合进销存系统所有功能入口和页面管理
class im : public QWidget
{
Q_OBJECT

public:
// 构造函数：parent 为父窗口，用于 Qt 对象树管理
explicit im(const QMap<QString, QVariant> &userInfo, QWidget *parent = nullptr);
// 析构函数
~im ();

private:
// 初始化主界面布局和子组件
void initUI ();
// 创建顶部菜单（功能入口区）
void createTopMenu ();

// 顶部菜单相关组件
QWidget *m_topMenu; // 顶部菜单容器
QPushButton *m_purchaseQueryBtn; // 采购查询按钮（未使用，预留）
QPushButton *m_warehouseQueryBtn; // 仓库查询按钮（未使用，预留）
QPushButton *m_conditionManageBtn;// 状态管理按钮（未使用，预留）
QPushButton *m_systemManageBtn; // 系统管理按钮（未使用，预留）
QPushButton *m_helpBtn; // 帮助按钮（未使用，预留）

// 堆叠窗口：用于管理不同功能页面的切换（如商品浏览、统计页面等）
QStackedWidget *m_stackedWidget;

// 子界面指针：通过顶部菜单按钮触发显示
CashierDialog *m_cashier; // 收银台窗口
StockIn *m_stockin; // 商品入库窗口
ProductModel *m_model; // 商品数据模型（关联数据库与界面）
ProductBrowsePanel *m_panel; // 商品浏览面板（显示商品列表）
ProductBrowsePage *m_productBrowsePage; // 商品浏览页面（第三个堆栈窗口）
StockInStatistics *m_stockInStatistics; // 入库统计页面（第四个堆栈窗口）
SaleStatistics *m_saleStatistics; // 销售统计页面（第五个堆栈窗口）
SalesAnalysis *m_salesAnalysis; // 销售分析页面（第六个堆栈窗口）

// 数据库实例：通过 AppInitializer 获取全局数据库连接
Database *m_db;

QMap<QString, QVariant> m_currentUser; // 新增：存储当前用户信息

public:
QMap<QString, QVariant> getCurrentUser() const;

};

#endif // IM_H
